package main.java.com.waylau.netty.demo.time.optimize;

import java.util.Date;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 * 作者  Administrator
 * 时间  2017/6/23 18:07
 * 文件  nettydemo
 * 描述
 */
public class TimeClientHandler1 extends ChannelInboundHandlerAdapter {
	private ByteBuf buf; // 所有接收的数据都应该被 累积 在 buf 变量里。
    private int i=1;
	@Override
	public void handlerAdded(ChannelHandlerContext ctx) {
		buf = ctx.alloc().buffer(4); // (1) 分配接收 缓存 4 字节
	}

	@Override
	public void handlerRemoved(ChannelHandlerContext ctx) {
		buf.release(); // (1)
		buf = null;
	}

	/**
	 * @param ctx
	 * @param msg Netty 会重复调用channelRead() 当有更多数据到达直到4个字节的数据被积累。
	 *            读完之后会不会被清空？
	 */
	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) {
		ByteBuf m = (ByteBuf) msg;
		buf.writeBytes(m); // (2) 读取一个还是一堆字节呢
		m.release();
		System.out.println("读取了 "+i++);//读一次加一次
		if (buf.readableBytes() >= 4) { // (3)
			long currentTimeMillis = (buf.readUnsignedInt() - 2208988800L) * 1000L;
			System.out.println(new Date(currentTimeMillis));
			i=1;// 重新开始
//			ctx.close();
		}
	}

	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
		cause.printStackTrace();
		ctx.close();
	}
}
